home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / util / rexx / FWCalendar.lha / gui4cli.lha / Gui4Cli / G4C / Calc.gc next >
Encoding:
Gui4CLI script  |  1998-07-06  |  9.0 KB  |  362 lines

  1. G4C
  2.  
  3. ; calc.gc
  4. ; ----------------------------------------------------------------------------
  5. ; A calculator, which uses Gui4Cli's mathematical abilities to calculate
  6. ; complex math expression, including functions such as Log, Sin, Tan etc.
  7. ; This used to be based on ARexx - changed for Gui4Cli V3.5
  8. ; Somewhat modified to convert between Dec<->Hex, Dec<->Bin and Hex<->Bin
  9. ; by Björn X Öqvist, 1998-03-25
  10. ; ----------------------------------------------------------------------------
  11.  
  12. WINBIG 262 34 237 118 "FPCalc"    ; Our window.
  13. WinType 11110001                  ; It has all standard gadgets & bottom resize
  14. ; WINBACKGROUND PATTERN 0 2         ; Add a flashy background..
  15.  
  16. BOX 0 0 0 0 IN ICONDROP ; A window sized box, taking us way beyond mere "cool"
  17.  
  18. ; ----------------------------------------------------------------------------
  19. ;       Startup/Ending events
  20. ; ----------------------------------------------------------------------------
  21.  
  22. xONLOAD                     ; Upon loading of the GUI
  23. ifexists port AREXX         ; check for rexxmast
  24.    ;
  25. elseifexists file rexxmast
  26.    run rexxmast
  27. elseifexists file sys:system/rexxmast
  28.    run sys:system/rexxmast
  29. else
  30.    ezreq "Could not find RexxMast" Abort ''
  31.    guiquit calc.gc
  32.    stop
  33. endif
  34. setscreen calc.gc $*SCREEN
  35. calcvar = ""              ; This is our main variable
  36. setgad calc.gc 2 HIDE      ; hide the ticker tape
  37. GUIOPEN calc.gc
  38. mem  = mem1              ; These are the Memory variables
  39. mem1 = 0
  40. mem2 = 0
  41. mem3 = 0
  42. mem4 = 0
  43. mem5 = 0
  44. membuff = ""
  45. .result = "0"              ; somewhere to put the result (env: variable)
  46. setvar calcmode SMALL      ; small/big window
  47.  
  48. xonclose
  49. guiquit calc.gc
  50. guiquit calc.hist
  51.  
  52. xOnQuit                     ; On quitting we delete the env variables, 
  53. delvar .result
  54.  
  55. ; ----------------------------------------------------------------------------
  56. ;       BUTTONS
  57. ;       All the buttons do the same thing. They AppVar their number or letter
  58. ;       to our main variable "calcvar" and redisplay it
  59. ; ----------------------------------------------------------------------------
  60.  
  61. ;============ The Buttons for the plain numbers
  62.  
  63. XBUTTON 6 21 25 15 1
  64. gadkey 1                       ; Keyboard shortcut
  65. AppVar calcvar 1               ; AppVar the number to "calcvar"
  66. update calc.gc  1 $calcvar     ; and re-display it.
  67.  
  68. XBUTTON 33 21 25 15 2          ; same as above
  69. gadkey  2
  70. AppVar calcvar 2
  71. update calc.gc  1 $calcvar
  72.  
  73. XBUTTON 60 21 25 15 3
  74. gadkey  3
  75. AppVar calcvar 3
  76. update calc.gc  1 $calcvar
  77.  
  78. XBUTTON 6 36 25 15 4
  79. gadkey  4
  80. AppVar calcvar 4
  81. update calc.gc  1 $calcvar
  82.  
  83. XBUTTON 33 36 25 15 5
  84. gadkey  5
  85. AppVar calcvar 5
  86. update calc.gc  1 $calcvar
  87.  
  88. XBUTTON 60 36 25 15 6
  89. gadkey  6
  90. AppVar calcvar 6
  91. update calc.gc  1 $calcvar
  92.  
  93. XBUTTON 6 51 25 15 7
  94. gadkey  7
  95. AppVar calcvar 7
  96. update calc.gc  1 $calcvar
  97.  
  98. XBUTTON 33 51 25 15 8
  99. gadkey  8
  100. AppVar calcvar 8
  101. update calc.gc  1 $calcvar
  102.  
  103. XBUTTON 60 51 25 15 9
  104. gadkey  9
  105. AppVar calcvar 9
  106. update calc.gc  1 $calcvar
  107.  
  108. XBUTTON 6 66 25 15 0
  109. gadkey  0
  110. AppVar calcvar 0
  111. update calc.gc  1 $calcvar
  112.  
  113. XBUTTON 33 66 25 15 .
  114. gadkey  .
  115. AppVar calcvar .
  116. update calc.gc  1 $calcvar
  117.  
  118. XBUTTON 60 66 25 15 <        ; backspace
  119. gadkey #8
  120. cutvar calcvar CUT CHAR -1 ""   ; It will delete the last character of
  121. update calc.gc  1 $calcvar     ; "calcvar" and re-display it
  122.  
  123. ;=============== The operators
  124.  
  125. XBUTTON 87 21 25 15 /
  126. gadkey  /
  127. AppVar calcvar /
  128. update calc.gc  1 $calcvar
  129.  
  130. XBUTTON 87 36 25 15 *       ; hit twice for square
  131. gadkey  *
  132. AppVar calcvar *
  133. update calc.gc  1 $calcvar
  134.  
  135. XBUTTON 87 51 25 15 -
  136. gadkey  -
  137. AppVar calcvar -
  138. update calc.gc  1 $calcvar
  139.  
  140. XBUTTON 87 66 25 15 +
  141. gadkey  +
  142. AppVar calcvar +
  143. update calc.gc  1 $calcvar
  144.  
  145. ;------------- right most bank
  146.  
  147. XBUTTON 114 21 25 15 (
  148. gadkey  (
  149. AppVar calcvar (
  150. update calc.gc  1 $calcvar
  151.  
  152. XBUTTON 114 36 25 15 )
  153. gadkey  )
  154. AppVar calcvar )
  155. update calc.gc  1 $calcvar
  156.  
  157. XBUTTON 195 66 37 15 CLR       ; Clear
  158. gadkey #127
  159. update calc.gc  1 0
  160. setvar calcvar ""
  161. if $calcmode = BIG                ; update ticker tape
  162.    lvuse calc.hist 1
  163.    LVAdd '** Clear **'
  164. endif
  165.  
  166. XBUTTON 114 51 25 30 =
  167. gadkey #13
  168. gosub calc.gc calculate        ; GoSub the routine which does the calculation
  169.  
  170. ; =============== The function buttons
  171.  
  172. XBUTTON 141 66 25 15 "^"
  173. gadkey ^
  174. AppVar calcvar ^
  175. update calc.gc  1 $calcvar
  176.  
  177. XBUTTON 168 66 25 15 "Pi"
  178. gadkey p
  179. AppVar calcvar pi
  180. update calc.gc  1 $calcvar
  181.  
  182. XBUTTON 141 21 44 15 "Sin"
  183. AppVar calcvar sin(
  184. update calc.gc  1 $calcvar
  185.  
  186. XBUTTON 186 21 45 15 "Cos"
  187. AppVar calcvar cos(
  188. update calc.gc  1 $calcvar
  189.  
  190. XBUTTON 186 36 45 15 "Tan"
  191. AppVar calcvar tan(
  192. update calc.gc  1 $calcvar
  193.  
  194. XBUTTON 141 36 44 15 "Log"
  195. AppVar calcvar log(
  196. update calc.gc  1 $calcvar
  197.  
  198. XBUTTON 141 51 44 15 "Ln"
  199. AppVar calcvar ln(
  200. update calc.gc  1 $calcvar
  201.  
  202. XBUTTON 186 51 45 15 "Exp"
  203. AppVar calcvar exp(
  204. update calc.gc  1 $calcvar
  205.  
  206. ; ----------------------------------------------------------------------------
  207. ;       Display Panel
  208. ;       It's a xTEXTin gadget, so we can enter a calculation directly into it.
  209. ; ----------------------------------------------------------------------------
  210.  
  211. XTEXTIN 5 5 227 15 "" calcvar 0 512
  212. GADID 1
  213. gosub calc.gc calculate        ; GoSub the routine which does the calculation
  214.  
  215.  
  216. ; ----------------------------------------------------------------------------
  217. ;       Routine to calculate & display result
  218. ; ----------------------------------------------------------------------------
  219.  
  220. xROUTINE calculate
  221. if $calcvar > ""                ; If there is an entry
  222.    if $calcmode = BIG
  223.       lvuse calc.hist 1         ; update history window if open
  224.       LVAdd '$calcvar'
  225.    endif
  226.    calcvar = $($calcvar)        ; do calculation
  227.    update calc.gc 1 $calcvar    ; display answer
  228.    if $calcmode = BIG           ; update ticker tape
  229.       LVAdd "-> $calcvar"
  230.    endif
  231.    if $calcvar = 0 
  232.       calcvar = ""              ; and if it's 0, we empty it (looks nicer)
  233.    endif
  234. endif 
  235.  
  236. ; ----------------------------------------------------------------------------
  237. ;       MEMORIES
  238. ;       If you look at the following code carefully, you will see that we
  239. ;       need a variable within a variable. We use "membuff" to construct it.
  240. ; ----------------------------------------------------------------------------
  241.  
  242. ;============ Memories display panel
  243.  
  244. XTEXTIN 6 84 123 14 "" $mem 0 30
  245. GadID 5
  246.  
  247. ;============ Memories cycler
  248.  
  249. XCYCLER 6 99 62 15 "" mem
  250. Cstr "M1" mem1
  251. Cstr "M2" mem2
  252. Cstr "M3" mem3
  253. Cstr "M4" mem4
  254. Cstr "M5" mem5
  255. membuff = "\$$mem"         ; This means set membuff to $ + whatever is in "mem"
  256. update calc.gc 5 $membuff  ; so that it points to the correct variable
  257.  
  258. ;============ Memory IN/OUT
  259.  
  260. XBUTTON 69 99 15 15 I          ; These buttons do the usual MEM in/out/+/-
  261. $mem = $calcvar                 ; stuff that calculators do.
  262. membuff = "\$$mem"
  263. update calc.gc 5 $membuff
  264.  
  265. XBUTTON 84 99 15 15 O
  266. membuff = "\$$mem"
  267. AppVar calcvar $membuff
  268. update calc.gc 1 $calcvar
  269.  
  270. XBUTTON 99 99 15 15 +
  271. membuff = "\$$mem"
  272. $mem = $($calcvar + $membuff)
  273. membuff = "\$$mem"
  274. update calc.gc 5 $membuff
  275.  
  276. XBUTTON 114 99 15 15 -
  277. membuff = "\$$mem"
  278. $mem = $($membuff - $calcvar)
  279. membuff = "\$$mem"
  280. update calc.gc 5 $membuff
  281.  
  282. ; ----------------------------------------------------------------------------
  283. ;       Hex/Binary conversion
  284. ; ----------------------------------------------------------------------------
  285.  
  286. XTEXTIN 132 84 100 14 "" BinHex 0 30
  287. GadID 4
  288.  
  289. XCYCLER 132 99 68 15 "" BinHexMode
  290. Cstr "Hex" hex
  291. Cstr "Bin" bin
  292.         IF $BinHexMode = "bin"
  293.                 CLI "rx 'say >env:.result C2B(X2C($BinHex\))'"
  294.         ELSE
  295.                 CLI "rx 'say >env:.result C2X(B2C($BinHex\))'"
  296.         ENDIF
  297.         SetVar BinHex $.result
  298.         update calc.gc 4 $BinHex
  299.  
  300. XBUTTON 201 99 15 15 I
  301.         IF $BinHexMode = "bin"
  302.                 CLI "rx 'say >env:.result C2B(D2C($calcvar\))'"
  303.         ELSE
  304.                 CLI "rx 'say >env:.result C2X(D2C($calcvar\))'"
  305.         ENDIF
  306.         SetVar BinHex $.result
  307.         update calc.gc 4 $BinHex
  308.  
  309. XBUTTON 216 99 15 15 O
  310.         IF $BinHexMode = "bin"
  311.                 CLI "rx 'say >env:.result C2D(B2C($BinHex\))'"
  312.         ELSE
  313.                 CLI "rx 'say >env:.result C2D(X2C($BinHex\))'"
  314.         ENDIF
  315.         SetVar calcvar $.result
  316.         update calc.gc 1 $calcvar
  317.  
  318.  
  319. ; ----------------------------------------------------------------------------
  320. ;       History ListView (on RMB)
  321. ;       Here we open the 2nd gui which has a listview displaying a history
  322. ;       of the actions we've taken. When clicked upon, it will restore the
  323. ;       line clicked on into the main panel
  324. ; ----------------------------------------------------------------------------
  325.  
  326. xOnRMB
  327. GuiOpen calc.hist
  328.  
  329. ; ================= NEWFILE ==================
  330.  
  331. NewFile calc.hist
  332.  
  333. WINBIG 161 24 205 156 'Calc History'
  334. wintype 11110001
  335. varpath calc.gc
  336.  
  337. xOnOpen
  338. calc.gc/calcmode = BIG
  339.  
  340. xOnClose
  341. calc.gc/calcmode = SMALL
  342.  
  343. ;---- This is the listview that will show the results
  344. ;     update main calc pannel according to lv line clicked
  345.  
  346. XLISTVIEW 0 0 0 0 "" lv "" 10 TXT
  347. gadid 1
  348. if $lv[0][3] == '** '       ; line cleared
  349.    calcvar = 0
  350. elseif $lv[0][3] = '=> '    ; a result
  351.    calcvar = $lv[3]
  352. else
  353.    calcvar = $lv            ; a calculation
  354. endif
  355. update calc.gc 1 $calcvar
  356. if $calcvar = 0
  357.    calcvar = ''
  358. endif
  359.  
  360.  
  361.  
  362.